/**
 * 
 */
package idv.takeshi.software.productline.bookstore.domain.model.useraccount;

/**
 * A model repository for user account aggregate models.
 * @author takeshi
 *
 */
public interface UserAccountRepository {
	
	
	/**
	 * Add a UserAccount.
	 * @param userAccount
	 * @throws UserAccountDuplicateException 
	 */
	public void add(UserAccount userAccount) throws UserAccountDuplicateException;
	
	/**
	 * Find a UserAccount by it's id.
	 * @param id
	 * @return
	 */
	public UserAccount findById(Long id);
	
	/**
	 * Find by account name.
	 * @param accountName
	 * @return
	 */
	public UserAccount findByAccountName(String accountName);
	
	/**
	 * Find a userAccount by it's activation key.
	 * @param activationKey
	 * @return
	 */
	public UserAccount findByActivationKey(String activationKey);
	
	/**
	 * Remove a UserAccount.
	 * @param userAccount
	 */
	public void remove(UserAccount userAccount);

}
